/*
 * This file is part of the OSMembrane project.
 * More informations under www.osmembrane.de
 * 
 * The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0.
 * for more details about the license see http://www.osmembrane.de/license/
 * 
 * Source: $HeadURL: http://osmembrane-gui.googlecode.com/svn/sources/src/de/osmembrane/model/parser/ParseException.java $ ($Revision: 821 $)
 * Last changed: $Date: 2011-02-15 14:54:41 +0000 (Tue, 15 Feb 2011) $
 */


package de.osmembrane.model.parser;

import de.osmembrane.tools.I18N;

/**
 * Is thrown when something is not right while parsing.
 * 
 * @author jakob_jarosch
 */
public class ParseException extends Exception {

	private static final long serialVersionUID = 2011011214380001L;

	/**
	 * type of the {@link ParseException}.
	 */
	public enum ErrorType {

		/**
		 * There is no known Task with this name.
		 */
		UNKNOWN_TASK,

		/**
		 * The task has an unknown format, e.g. a parameter is not known, or the
		 * pipes do not match.
		 */
		UNKNOWN_TASK_FORMAT,

		/**
		 * Found no default parameter for the task.
		 */
		NO_DEFAULT_PARAMETER_FOUND,

		/**
		 * The task has a connection which is not allowed to be one.
		 */
		CONNECTION_NOT_PERMITTED,

		/**
		 * The pipe-stream direction could not be recognized implicit.
		 */
		UNKNOWN_PIPE_STREAM,

		/**
		 * The defined inPipe for a task has no counterpart task with a outPipe.
		 */
		COUNTERPART_PIPE_MISSING,
		
		/**
		 * The given parameter has an invalid value.
		 */
		INVALID_PARAMETER_VALUE,
	}

	private ErrorType type;
	private Object[] messageValues;

	/**
	 * Creates a new {@link ParseException} with a given {@link ErrorType}.
	 * 
	 * @param type
	 *            corresponding type for the {@link ParseException}
	 * @param messageValues
	 *            messages which are used by the exception message
	 */
	public ParseException(ErrorType type, Object... messageValues) {
		this.type = type;
		this.messageValues = messageValues;
	}

	/**
	 * Returns the {@link ErrorType} of the {@link ParseException}.
	 * 
	 * @return {@link ErrorType} of the {@link ParseException}
	 */
	public ErrorType getType() {
		return type;
	}

	@Override
	public String getMessage() {
		return I18N.getInstance().getString("Model.Parser.Exceptions." + type,
				messageValues);
	}
}
